const Users = require('../../models/users')
const jwt = require('jsonwebtoken')
const {v4: uuidv4} = require('uuid')
const Token = require('../../models/token')
const process = require('node:process')
const postRegister = async (req, res) => {
  try {
    // Проверяем, существует ли пользователь с указанным email
    const existingUser = await Users.findOne({email: req.body.email})
    if (existingUser) {
      return res.status(403).json({success: false, msg: 'User already exists'})
    }

    // Создаем нового пользователя
    const newUser = {
      id: uuidv4(),
      name: req.body.name,
      email: req.body.email,
      password: req.body.password,
    }

    // Сохраняем нового пользователя в базе данных
    const user = await Users.create(newUser)

    // Создаем JWT-токены для нового пользователя
    const deviceId = uuidv4()
    const accessToken = jwt.sign({user}, process.env.SECRET_KEY, {expiresIn: '15s'})
    const refreshToken = jwt.sign({user, deviceId}, process.env.SECRET_KEY, {expiresIn: '30d'})

    // Сохраняем refresh токен в базе данных
    await Token.create({
      id: uuidv4(),
      userId: user._id,
      token: refreshToken,
      device: deviceId,
      date: new Date(),
    })

    // Отправляем ответ с данными о пользователе и токенах
    return res.status(200).json({
      success: true,
      user: user,
      accessToken,
      refreshToken,
      expireToken: new Date().getTime() + 20 * 1000,
    })
  } catch (err) {
    // Обрабатываем возможные ошибки
    return res.status(500).json({success: false, msg: err.message})
  }
}

module.exports = {
  postRegister,
}
